// 获取 mongoose
const mongoose = require("mongoose");

// get商品列表数据
const get = async ({
    curPage, eachPage
}) => {
    (curPage = ~~curPage), (eachPage = ~~eachPage);
    const data = {
        total: 0,
        maxPage: 0,
        rows: [],
    }
    // 是获取数据库电影的数据
    const commodityModel = mongoose.model("commodity");
    // 获取当前model映射的那个集合里存在的文档总数
    data.total = await commodityModel.countDocuments();
    // Math.ceil往上取整
    data.maxPage = Math.ceil(data.total / eachPage);

    //查询数据库所有数据 跳过（当前页-1）*当前页显示数据  limit 查询多少条数据  sort 排序  execute 立即执行
    const skipNum = (curPage - 1) * eachPage;
    data.rows = await commodityModel.find().skip(skipNum).limit(eachPage).populate("Child_type").sort({
        _id: -1
    }).exec();





    return data;

}

// 新增商品数据
const addCommodity = async ({ name, guarantee, storeCondition, aftersale, place, specs, pack, sales, desc }) => {
    // model传一个参数时表示获取这个model对象
    const commodityModel = mongoose.model("commodity");
    // 添加商品数据
    return await commodityModel.create({ name, guarantee, storeCondition, aftersale, place, specs, pack, sales, desc });
}

// 删除商品数据
const delCommodity = async ({ _id }) => {
    const commodityModel = mongoose.model("commodity");
    // remove删除数据库_id匹配的数据
    const { deletedCount } = await commodityModel.remove({ _id });
    if (deletedCount) {
        return { status: true }
    }
    return { status: false };
}

// 通过名称查找商品
const findCommodity = async (name) => {
    const commodityModel = mongoose.model("commodity");
    const data = await commodityModel.find({ name: { $regex: name, $options: 'i' } });
    return data;
}

// 修改商品数据
const editCommodity = async (newData) => {
    const commodityModel = mongoose.model("commodity");
    await commodityModel.update({ _id: newData.id }, newData);
}

// 上传商品图片
const uploadImgs = async ({ _id, url }) => {
    // 操作数据库中 commodity 集合
    const commodityModel = mongoose.model("commodity");
    // 查找到id对应的数据，并解构出图片列表，将添加的图片地址，添加进去
    const { image } = await commodityModel.findOne({ _id });
    image.push(url)
    //更新方法，第一个参数是需要更新的数据id ，第二个参数是需要更新的数据
    await commodityModel.updateOne({ _id }, { image })
    // 返回最新的数据
    return await commodityModel.findOne({ _id });
}

// 上传详情商品图片
const uploadDetailsImgs = async ({ _id, url }) => {
    // 操作数据库中 commodity 集合
    const commodityModel = mongoose.model("commodity");
    // 查找到id对应的数据，并解构出图片列表，将添加的图片地址，添加进去
    const { detailsImage } = await commodityModel.findOne({ _id });
    console.log(detailsImage);
    detailsImage.push(url)
    //更新方法，第一个参数是需要更新的数据id ，第二个参数是需要更新的数据
    await commodityModel.updateOne({ _id }, { detailsImage })
    // 返回最新的数据
    return await commodityModel.findOne({ _id });
}

// 删除商品图片
const delImgs = async ({ _id, url }) => {
    const commodityModel = mongoose.model("commodity");
    // findOne找到匹配的数据立即返回，不会接着匹配数据
    const { image } = await commodityModel.findOne({ _id });
    // 删除url对应的图片，并保存！！！！！sava
    // commodity.image.pull(url);
    image.some((item, index) => {
        if (item === url) {
            image.splice(index, 1)
        }
    })
    await commodityModel.updateOne({ _id }, { image })
}

// 删除详情图片
const deleteDetailsImg = async ({ _id, url }) => {
    const commodityModel = mongoose.model("commodity");
    // findOne找到匹配的数据立即返回，不会接着匹配数据
    const { detailsImage } = await commodityModel.findOne({ _id });
    // 删除url对应的图片，并保存！！！！！sava
    // commodity.image.pull(url);
    detailsImage.some((item, index) => {
        if (item === url) {
            detailsImage.splice(index, 1)
        }
    })
    await commodityModel.updateOne({ _id }, { detailsImage })
}

// 通过id 查找商品数据
const findOne = async _id => {
    // model传一个参数时表示获取这个model对象
    const commodityModel = mongoose.model("commodity");
    // 添加学生数据
    return await commodityModel.findOne({ _id });
}
// 修改商品所属类型
const resComType = async ({ _id, Child_type }) => {
    // model传一个参数时表示获取这个model对象
    const commodityModel = mongoose.model("commodity");
    return commodityModel.updateOne({ _id }, { Child_type })

}


// 将接口了暴露出去
module.exports = {
    get, addCommodity, delCommodity, findCommodity, editCommodity, uploadImgs, delImgs, findOne, uploadDetailsImgs, deleteDetailsImg, resComType
}

